//: C20:Swapping.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 1999
// Copyright notice in Copyright.txt
// All basic sequence containers can be swapped
#include "Noisy.h"
#include <list>
#include <vector>
#include <deque>
#include <iostream>
#include <algorithm>
using namespace std;
ostream_iterator<Noisy> out(cout, " ");

template<class Cont>
void print(Cont& c, char* comment = "")
{
    cout << "\n" << comment << ": ";
    copy(c.begin(), c.end(), out);
    cout << endl;
}

template<class Cont>
void testSwap(char* cname)
{
    Cont c1, c2;
    generate_n(back_inserter(c1), 10, NoisyGen());
    generate_n(back_inserter(c2), 5, NoisyGen());
    cout << "\n" << cname << ":" << endl;
    print(c1, "c1");
    print(c2, "c2");
    cout << "\n Swapping the " << cname
         << ":" << endl;
    c1.swap(c2);
    print(c1, "c1");
    print(c2, "c2");
}

int main()
{
    testSwap<vector<Noisy> >("vector");
    testSwap<deque<Noisy> >("deque");
    testSwap<list<Noisy> >("list");
} ///:~
